home *** CD-ROM | disk | FTP | other *** search
/ AOL File Library: 2,801 to 2,900 / aol-file-protocol-4400-2801-to-2900.zip / AOLDLs / C++ Files Library / FFT and Complex Numbers Library / FFTLibrary.sit / FFT library ƒ / Complex ƒ / ComplexOperators.cp < prev    next >
Text File  |  1995-01-15  |  4KB  |  239 lines

  1. //
  2. //    File: ComplexOperators.cp
  3. //    Copyright ⌐1994-1995 James Wilson
  4. //    All rights reserved.
  5. //
  6. //    Implementation file for Complex. This file includes the implementation of most of
  7. //    the overloaded operators of Complex.
  8.  
  9. #ifndef __COMPLEXNUMBERS__
  10. #include "ComplexNumbers.h"
  11. #endif
  12.  
  13. // Operator+
  14.  
  15. Complex Complex::operator+(const Complex& z) const
  16. {
  17.     return Complex(Re()+z.Re(), Im()+z.Im());
  18. }
  19.  
  20. Complex Complex::operator+(const FP_TYPE realNum) const
  21. {
  22.     return Complex(Re()+realNum, Im());
  23. }
  24.  
  25. Complex operator+(const FP_TYPE realNum, const Complex& z)
  26. {
  27.     return Complex(z.Re()+realNum, z.Im());
  28. }
  29.  
  30. // Operator-
  31.  
  32. Complex Complex::operator-(const Complex& z) const
  33. {
  34.     return Complex(Re()-z.Re(), Im()-z.Im());
  35. }
  36.  
  37. Complex Complex::operator-(const FP_TYPE realNum) const
  38. {
  39.     return Complex(Re()-realNum, Im());
  40. }
  41.  
  42. Complex operator-(const FP_TYPE realNum, const Complex& z)
  43. {
  44.     return Complex(realNum-z.Re(), -z.Im());
  45. }
  46.  
  47. // Operator*
  48.  
  49. Complex Complex::operator*(const Complex& z) const
  50. {
  51.     return Complex(Re()*z.Re()-Im()*z.Im(), Re()*z.Im()+Im()*z.Re());
  52. }
  53.  
  54. Complex Complex::operator*(const FP_TYPE scalar) const
  55. {
  56.     return Complex(Re()*scalar, Im()*scalar);
  57. }
  58.  
  59. Complex operator*(const FP_TYPE scalar, const Complex& z)
  60. {
  61.     return Complex(scalar*z.Re(), scalar*z.Im());
  62. }
  63.  
  64. // Operator/
  65.  
  66. Complex Complex::operator/(const Complex& z) const
  67. {
  68.     Complex            numer(Re()*z.Re()+Im()*z.Im(), Im()*z.Re()-Re()*z.Im());
  69.     FP_TYPE            denom = z.Re()*z.Re()+z.Im()*z.Im();
  70.     
  71.     return numer/denom;
  72. }
  73.  
  74. Complex Complex::operator/(const FP_TYPE scalar) const
  75. {
  76.     return Complex(Re()/scalar, Im()/scalar);
  77. }
  78.  
  79. Complex operator/(const FP_TYPE realNum, const Complex& z)
  80. {
  81.     Complex            temp(realNum, 0.0);
  82.     
  83.     return temp/z;
  84. }
  85.  
  86. // operator&&
  87.  
  88. long Complex::operator&&(const Complex& z) const
  89. {
  90.     return (((Re() != 0.0) || (Im() != 0.0)) &&
  91.                 ((z.Re() != 0.0) || (z.Im() != 0.0))) ? true : false;
  92. }
  93.  
  94. long Complex::operator&&(const FP_TYPE realNum) const
  95. {
  96.     return (((Re() != 0.0) || (Im() != 0.0)) && (realNum != 0.0)) ? true : false;
  97. }
  98.  
  99. long operator&&(const FP_TYPE realNum, const Complex& z)
  100. {
  101.     return ((realNum != 0.0) && ((z.Re() != 0.0) || (z.Im() != 0.0))) ? true : false;
  102. }
  103.  
  104. // operator||
  105.  
  106. long Complex::operator||(const Complex& z) const
  107. {
  108.     return (((Re() != 0.0) || (Im() != 0.0)) ||
  109.             ((z.Re() != 0.0) || (z.Im() != 0.0))) ? true : false;
  110. }
  111.  
  112. long Complex::operator||(const FP_TYPE realNum) const
  113. {
  114.     return (((Re() != 0.0) || (Im() != 0.0)) || (realNum != 0.0)) ? true : false;
  115. }
  116.  
  117. long operator||(const FP_TYPE realNum, const Complex& z)
  118. {
  119.     return ((realNum != 0.0) || ((z.Re() != 0.0) || (z.Im() != 0.0))) ? true : false;
  120. }
  121.  
  122. // operator==
  123.  
  124. long Complex::operator==(const Complex& z) const
  125. {
  126.     return ((Re() == z.Re()) && (Im() == z.Im())) ? true : false;
  127. }
  128.  
  129. long Complex::operator==(const FP_TYPE realNum) const
  130. {
  131.     return ((Re() == realNum) && (Im() == 0.0)) ? true : false;
  132. }
  133.  
  134. long operator==(const FP_TYPE realNum, const Complex& z)
  135. {
  136.     return ((realNum == z.Re()) && (0.0 == z.Im())) ? true : false;
  137. }
  138.  
  139. // operator!=
  140.  
  141. long Complex::operator!=(const Complex &z) const
  142. {
  143.     return ((Re() != z.Re()) || (Im() != z.Im())) ? true : false;
  144. }
  145.  
  146. long Complex::operator!=(const FP_TYPE realNum) const
  147. {
  148.     return ((Re() != realNum) || (Im() != 0.0)) ? true : false;
  149. }
  150.  
  151. long operator!=(const FP_TYPE realNum, const Complex& z)
  152. {
  153.     return ((realNum != z.Re()) || (0.0 != z.Im())) ? true : false;
  154. }
  155.  
  156. // operator=
  157.  
  158. Complex& Complex::operator=(const Complex& z)
  159. {
  160.     Real() = z.Re();
  161.     Imag() = z.Im();
  162.     
  163.     return *this;
  164. }
  165.  
  166. Complex& Complex::operator=(const FP_TYPE realNum)
  167. {
  168.     Real() = realNum;
  169.     Imag() = 0.0;
  170.     
  171.     return *this;
  172. }
  173.  
  174. // operator+=
  175.  
  176. Complex& Complex::operator+=(const Complex& z)
  177. {
  178.     Real() += z.Re();
  179.     Imag() += z.Im();
  180.     
  181.     return *this;
  182. }
  183.  
  184. Complex& Complex::operator+=(const FP_TYPE realNum)
  185. {
  186.     Real() += realNum;
  187.     
  188.     return *this;
  189. }
  190.  
  191. // operator-=
  192.  
  193. Complex& Complex::operator-=(const Complex& z)
  194. {
  195.     Real() -= z.Re();
  196.     Imag() -= z.Im();
  197.     
  198.     return *this;
  199. }
  200.  
  201. Complex& Complex::operator-=(const FP_TYPE realNum)
  202. {
  203.     Real() -= realNum;
  204.     
  205.     return *this;
  206. }
  207.  
  208. // operator*=
  209.  
  210. Complex& Complex::operator*=(const Complex& z)
  211. {
  212.     *this = *this * z;
  213.     
  214.     return *this;
  215. }
  216.  
  217. Complex& Complex::operator*=(const FP_TYPE realNum)
  218. {
  219.     *this = *this * realNum;
  220.     
  221.     return *this;
  222. }
  223.  
  224. // operator/=
  225.  
  226. Complex& Complex::operator/=(const Complex& z)
  227. {
  228.     *this = *this / z;
  229.     
  230.     return *this;
  231. }
  232.  
  233. Complex& Complex::operator/=(const FP_TYPE realNum)
  234. {
  235.     *this = *this / realNum;
  236.     
  237.     return *this;
  238. }
  239.